
# -*- coding: utf-8 -*-

from django.db import models
from django.forms import ModelForm, ModelChoiceField, ModelMultipleChoiceField
from django.utils.encoding import force_unicode
from comunidadcyt.Registration_Users.models import User
from comunidadcyt.middleware import get_request
import unicodedata

class Departamentos(models.Model):
    Nombre_departamento = models.CharField(max_length=200, unique=True, verbose_name="* Nombre")
    Descripcion_dpto = models.TextField(blank=True, verbose_name="Descripción")
    Responsables = models.ManyToManyField(User, related_name="departamento_que_dirige", verbose_name="Responsables", null=True, blank=True)
    Director = models.ForeignKey(User,related_name="Director_de", verbose_name="* Director")
    Fecha_creacion = models.DateField(verbose_name="* Fecha de creación")
    CV= models.FileField(max_length=300,upload_to='media/Departamentos', blank=True,editable=False)
    Imagen = models.ImageField(max_length=300,upload_to='media/Departamentos',blank=True,null=True, default="static/images/default.png")
    Creador = models.CharField(max_length=200,editable=False)
    
    def save(self, **args):
        self.Creador=get_request().user.username
        for field in self._meta.fields:
            if field.name == 'Imagen':
                field.upload_to = 'media/Departamentos/%s' % unicodedata.normalize('NFKD', self.Nombre_departamento).encode('ascii','ignore').replace(" ", "")
            if field.name == 'CV':
                field.upload_to = 'media/Departamentos/%s' % unicodedata.normalize('NFKD', self.Nombre_departamento).encode('ascii','ignore').replace(" ", "")
        super(Departamentos, self).save()

    def esResponsable(self, user):
        if user:
            for u in self.Responsables.all():
                if u.id == user.id:
                    return True
        return False

    def esMiembro(self, user):
        if user:
            for u in self.Responsables.all():
                if u.id == user.id:
                    return True
            for u in self.getMiembros():
                if u.id == user.id:
                    return True
        return False

    def getMiembros(self):
        list_grupos = self.grupos.all()
        list_proyectos = self.proyectos.all()
        list_miembros = []
        for grupo in list_grupos:
            for miembros in grupo.Miembros.all():
                if not list_miembros.__contains__(miembros):
                    list_miembros += [miembros]
        for proy in list_proyectos:
            for miembros in proy.Miembros.all():
                if not list_miembros.__contains__(miembros):
                    list_miembros += [miembros]
        return list_miembros


    class Meta:
        db_table = 'Departamentos' 
        ordering = ['Nombre_departamento']
        verbose_name = "Departamento"
       
    def __str__(self):
        return force_unicode(self.Nombre_departamento)

    def __unicode__(self):
        return force_unicode(self.Nombre_departamento)

    def get_absolute_url(self):
        return '/comunidadcyt/departamentos/ver/%i' % self.id

class choiceName(ModelChoiceField):
    def label_from_instance(self, obj):
        name = force_unicode(obj.first_name +' '+ obj.last_name)
        return name

class choiceMultipleName(ModelMultipleChoiceField):
    def label_from_instance(self, obj):
        name = force_unicode(obj.first_name +' '+ obj.last_name)
        return name

class DepartamentosForm(ModelForm):  #formulario para el modelo Departamentos
    def __init__(self, *args, **kwargs):
        super(DepartamentosForm, self).__init__(*args, **kwargs)
        self.fields['Director']=choiceName(queryset=User.objects.all().order_by('first_name', 'last_name'))
        self.fields['Director'].label="* Director"
        self.fields['Director'].empty_label=None
        self.fields['Responsables']=choiceMultipleName(queryset=User.objects.all().order_by('first_name', 'last_name'),label="* Responsables")
        self.fields['Responsables'].empty_label=None
        self.fields['Responsables'].help_text=None
    class Meta:
        model = Departamentos


